Application publishing or server based computing allows a client computer to access and utilize an application program or operating system that runs on a remote server. The server sends a graphical user interface for the application or operating system over a network to the client. A user provides input to client computer input devices, which the client sends over the network to the server. In this way, a user interface, which may include a full desktop or just the user interface of a particular application is “remoted” to a user over a network.
Remote Desktop Services (RDS) is one of the components of the Microsoft Windows operating system that allows a user to access the operating system, applications, and data on a remote computer over a network. RDS employs a protocol known as the Remote Desktop Protocol (RDP) to for remoting a desktop over a network. The server component of RDS is called Terminal Server, which listens on a configured Transmission Control Protocol (TCP) port, typically port 3389. When an RDP client connects to this port, it is associated with a unique TCP session. A graphics device interface (GDI) graphics subsystem authenticates the user and presents the UI to the client machine. Once a client initiates a connection and is informed of a successful invocation of a terminal services stack at the server, it loads keyboard/mouse drivers delivered to it over the network by the server. The graphical user interface (GUI) data received over RDP is decoded and rendered as a GUI on the client machine. Keyboard and mouse inputs by the user to the client machine ordinarily are transmitted to the server to allow a user control and access applications and data on the remote server.
Virtual Network Computing (VNC) is a graphical desktop sharing system that typically uses the Remote Frame Buffer (RFB) protocol to allow a client to remotely control a computer system over a persistent TCP connection, typically using TCP port 5900. The RFB protocol allows a server to update the frame buffer displayed on a VNC viewer running on the client machine. In general terms, a frame buffer typically occupies a portion of a Random Access Memory (RAM) used for temporary storage of image data that available for display. A VNC viewer running on one operating system on a client may connect to a VNC server running on the same or a different operating system. In the RFB protocol, the server sends small rectangles of the server machine frame buffer to the client, which the client then assembles to form the graphical user interface. VNC allows for various encoding methods to determine the most efficient way to transfer the rectangles from the server frame buffer to the client. The VNC protocol ordinarily allows the client and server to negotiate which encoding will be used. One encoding method supported by most VNC clients and servers, is “raw encoding,” in which pixel data is sent in left-to-right scan-line order, and in which after the first or original full screen has been transmitted, only frame buffer rectangles that have changed are transferred.
Some VNC implementations, .e.g., “RealVNC,” available from RealVNC Ltd. of Cambridge, UK, use a Hypertext Transfer Protocol (HTTP) server to provide a VNC viewer to the client as a Java applet. The Java applet then connects to the VNC server for remote UI access over a separate persistent TCP connection, typically over TCP port 5900. Yet another VNC implementation, referred to as “ThinVNC,” available from Cybele Software, Inc. of Wilmington, Del. uses the WebSocket protocol of HTML5 for remote access to a user interface. WebSocket involves use of a persistent TCP connection between a client and a server that runs a remote application. WebSocket uses HTTP as a conduit to set up persistent connection between client and server. In particular, WebSocket features an HTTP-compatible handshake that allows a server to interpret part of the handshake request as HTTP and then switch to WebSocket.
Existing technologies therefore require persistent connections over exotic TCP ports for remoting a user interface or through advanced, and potentially insecure, web technologies such as WebSockets, which is not always available.